

package com.hazelcast.internal.serialization.impl.compact.record;

import com.hazelcast.internal.serialization.impl.compact.Schema;
import com.hazelcast.nio.serialization.compact.CompactReader;
import com.hazelcast.nio.serialization.compact.CompactWriter;

/**
 * Reads or writes a single component of the record object to reader/writer.
 */
public interface ComponentReaderWriter {

    /**
     * @param compactReader to read the component from.
     * @param schema        to validate expected and actual types.
     * @return a single component of the record object.
     */
    Object readComponent(CompactReader compactReader, Schema schema);

    /**
     * @param compactWriter to write the component to.
     * @param recordObject  to get the component from.
     * @throws Exception in case the reflective access to the component fails.
     */
    void writeComponent(CompactWriter compactWriter, Object recordObject) throws Exception;
}
